<?php

class Visitas_model extends CI_Model {

    function __construct() {
        parent::__construct();
    }

    private $avaluoId;
    private $selDepartamento;
    private $ciudadId;
    private $visitaVereda;
    private $visitaVeredaNombre;
    private $tipInmuebleId;
    private $visitaPropietario;
    private $visitaFechaVisita;
    private $visitaFechaAvaluo;
    private $firmaId;
    private $visitaLocalizacion;
    private $visitaCaracteristicas;
    private $viaIdAcceso;
    private $estadoPredIdViaAcceso;
    private $visitaServicioOtro1;
    private $visitaUsoOtro1;
    private $visitaAltura;
    private $visitaOtroPiso;
    private $visitaEstratificacion;
    private $visitaNumCatastral;
    private $visitaFolioMatricula;
    private $visitaEscrituraPublica;
    private $visitaNormaUsoSuelo;
    private $visitaTerreno;
    private $unidadId;
    private $visitaLinderoNorte;
    private $visitaLinderoSur;
    private $visitaLinderoOriente;
    private $visitaLinderoOccidente;
    private $hdtransaccion;
    private $visitaCaracZanjones;
    private $visitaFormaGeo;
    private $visitaFrente;
    private $unidadIdFrente;
    private $visitaFondo;
    private $unidadIdFondo;
    private $visitaPromedio;
    private $visitaViaAcceso;
    private $viaId;
    private $estadoViaId;
    private $visitaServicioOtro2;
    private $visitaUsoOtro2;
    private $visitaCaracCanios;
    private $visitaCaracVallados;
    private $visitaCaracServi;
    private $visitaCaracPuentes;
    private $visitaCaracOtros;
    private $visitaTerrenoObservaciones;
    private $hdtransaccion1;
    private $hdtransaccion2;
    private $hdtransaccion3;
    private $hdtransaccion4;
    private $hdtransaccion5;
    private $visitaMetodologiaAvaluo;
    private $visitaInvesEconomica;
    private $visitaConsideraciones;
    private $usuarioCreo = 1;
    private $visitaId;
    private $avaluoProposito;
    private $visitaSolicitante;
    private $visitaNotaInvestiga;
    //Arreglos
    private $usoActualPredio;
    private $servPubli1;
    private $servPubli2;
    private $usoPredomina1;
    private $usoPredomina2;
    private $arregloTopografias = array();
    private $arregloConstrucciones = array();

    public function crear() {
        $this->validaCampos();
        $this->db->trans_start(); //inicia la transaccion
        $sql = "insert into visitas(visitaFechaCreo,usuarioCreo,avaluoId,ciudadId,visitaVereda,visitaVeredaNombre,visitaPropietario,tipInmuebleId,visitaFechaVisita,visitaFechaAvaluo,visitaLocalizacion,visitaCaracteristicas,viaIdAcceso,estadoPredIdViaAcceso,visitaServicioOtro1,visitaUsoOtro1,visitaAltura,visitaOtroPiso,visitaEstratificacion,visitaNumCatastral,visitaFolioMatricula,visitaEscrituraPublica,visitaNormaUsoSuelo,visitaTerreno,unidadId,visitaLinderoNorte,visitaLinderoSur,visitaLinderoOriente,visitaLinderoOccidente,visitaFrente,unidadIdFrente,visitaFondo,unidadIdFondo,visitaPromedio,visitaViaAcceso,viaId,estadoViaId,visitaServicioOtro2,visitaUsoOtro2,visitaCaracCanios,visitaCaracVallados,visitaCaracServi,visitaCaracPuentes,visitaCaracOtros,visitaTerrenoObservaciones,visitaMetodologiaAvaluo,visitaInvesEconomica,visitaConsideraciones,firmaId,visitaSolicitante,visitaCaracZanjones,visitaNotaInvestiga,visitaFormaGeo) 
            values(now(),{$this->usuarioCreo},{$this->avaluoId},{$this->ciudadId},'{$this->visitaVereda}','{$this->visitaVeredaNombre}','{$this->visitaPropietario}','{$this->tipInmuebleId}','{$this->visitaFechaVisita}','{$this->visitaFechaAvaluo}','{$this->visitaLocalizacion}','{$this->visitaCaracteristicas}','{$this->viaIdAcceso}','{$this->estadoPredIdViaAcceso}','{$this->visitaServicioOtro1}','{$this->visitaUsoOtro1}','{$this->visitaAltura}','{$this->visitaOtroPiso}','{$this->visitaEstratificacion}','{$this->visitaNumCatastral}','{$this->visitaFolioMatricula}','{$this->visitaEscrituraPublica}','{$this->visitaNormaUsoSuelo}','{$this->visitaTerreno}','{$this->unidadId}','{$this->visitaLinderoNorte}','{$this->visitaLinderoSur}','{$this->visitaLinderoOriente}','{$this->visitaLinderoOccidente}','{$this->visitaFrente}','{$this->unidadIdFrente}','{$this->visitaFondo}','{$this->unidadIdFondo}','{$this->visitaPromedio}','{$this->visitaViaAcceso}','{$this->viaId}','{$this->estadoViaId}','{$this->visitaServicioOtro2}','{$this->visitaUsoOtro2}','{$this->visitaCaracCanios}','{$this->visitaCaracVallados}','{$this->visitaCaracServi}','{$this->visitaCaracPuentes}','{$this->visitaCaracOtros}','{$this->visitaTerrenoObservaciones}','{$this->visitaMetodologiaAvaluo}','{$this->visitaInvesEconomica}','{$this->visitaConsideraciones}','{$this->firmaId}','{$this->visitaSolicitante}','{$this->visitaCaracZanjones}','{$this->visitaNotaInvestiga}','{$this->visitaFormaGeo}')";
        $this->db->query($sql);
        $visitaId = $this->db->insert_id();
        $sql = "update avaluos set avaluoProposito = '{$this->avaluoProposito}' where avaluoId = '{$this->avaluoId}'";
        $this->db->query($sql);
        //insertar en usoInmueblesActual
        $this->insertaTablasPuente("usosInmueblesVisitas", $this->usoActualPredio, $visitaId, "Actual");
        //insertar en serviciosPublicosVisitas -> visita
        $this->insertaTablasPuente("serviciosPublicosVisitas", $this->servPubli1, $visitaId, "Caracteristica");
        //insertar en usoInmueblesActual --> uso predominante
        $this->insertaTablasPuente("usosInmueblesVisitas", $this->usoPredomina1, $visitaId, "Predominante");
        //insertar en topograficasVisitas
        $this->insertaDeTemporal("topografias", $this->hdtransaccion, $visitaId);
        //insertar en serviciosPublicosVisitas -> predio
        $this->insertaTablasPuente("serviciosPublicosVisitas", $this->servPubli2, $visitaId, "Predio");
        //insertar en usoInmueblesActual --> uso predio
        $this->insertaTablasPuente("usosInmueblesVisitas", $this->usoPredomina2, $visitaId, "Predio");
        //insertar en construccionesVisitas -->Construcciones
        $this->insertaDeTemporal("construcciones", $this->hdtransaccion1, $visitaId, "C");
        //insertar en construccionesVisitas -->Anexos
        $this->insertaDeTemporal("construcciones", $this->hdtransaccion2, $visitaId, "A");
        //insertar en elementosVisitas
        $this->insertaDeTemporal("elementos", $this->hdtransaccion3, $visitaId);
        //insertar en investigaciones
        $this->insertaDeTemporal("investigaciones", $this->hdtransaccion4, $visitaId);
        //insertar en depreciaciones
        $this->insertaDeTemporal("depreciaciones", $this->hdtransaccion5, $visitaId);
        $this->db->trans_complete(); //Fin transacción
        return $visitaId;
        ;
    } //fin public function crear() {
    public function edita() {
        $this->validaCampos();
        $this->db->trans_start(); //inicia la transaccion
        $sql = "update visitas set ";
        $sql .= "visitaFechaEdito = now(), ";
        $sql .= "usuarioEdito = 1, ";
        $sql .= "avaluoId = '{$this->avaluoId}', ";
        $sql .= "ciudadId = '{$this->ciudadId}', ";
        $sql .= "visitaVereda = '{$this->visitaVereda}', ";
        $sql .= "visitaVeredaNombre = '{$this->visitaVeredaNombre}', ";
        $sql .= "visitaPropietario = '{$this->visitaPropietario}', ";
        $sql .= "tipInmuebleId = '{$this->tipInmuebleId}', ";
        $sql .= "visitaFechaVisita = '{$this->visitaFechaVisita}', ";
        $sql .= "visitaFechaAvaluo = '{$this->visitaFechaAvaluo}', ";
        $sql .= "visitaLocalizacion = '{$this->visitaLocalizacion}', ";
        $sql .= "visitaCaracteristicas = '{$this->visitaCaracteristicas}', ";
        $sql .= "viaIdAcceso = '{$this->viaIdAcceso}', ";
        $sql .= "estadoPredIdViaAcceso = '{$this->estadoPredIdViaAcceso}', ";
        $sql .= "visitaServicioOtro1 = '{$this->visitaServicioOtro1}', ";
        $sql .= "visitaUsoOtro1 = '{$this->visitaUsoOtro1}', ";
        $sql .= "visitaAltura = '{$this->visitaAltura}', ";
        $sql .= "visitaOtroPiso = '{$this->visitaOtroPiso}', ";
        $sql .= "visitaEstratificacion = '{$this->visitaEstratificacion}', ";
        $sql .= "visitaNumCatastral = '{$this->visitaNumCatastral}', ";
        $sql .= "visitaFolioMatricula = '{$this->visitaFolioMatricula}', ";
        $sql .= "visitaEscrituraPublica = '{$this->visitaEscrituraPublica}', ";
        $sql .= "visitaNormaUsoSuelo = '{$this->visitaNormaUsoSuelo}', ";
        $sql .= "visitaTerreno = '{$this->visitaTerreno}', ";
        $sql .= "unidadId = '{$this->unidadId}', ";
        $sql .= "visitaLinderoNorte = '{$this->visitaLinderoNorte}', ";
        $sql .= "visitaLinderoSur = '{$this->visitaLinderoSur}', ";
        $sql .= "visitaLinderoOriente = '{$this->visitaLinderoOriente}', ";
        $sql .= "visitaLinderoOccidente = '{$this->visitaLinderoOccidente}', ";
        $sql .= "visitaCaracZanjones = '{$this->visitaCaracZanjones}', ";
        $sql .= "visitaFrente = '{$this->visitaFrente}', ";
        $sql .= "unidadIdFrente = '{$this->unidadIdFrente}', ";
        $sql .= "visitaFondo = '{$this->visitaFondo}', ";
        $sql .= "unidadIdFondo = '{$this->unidadIdFondo}', ";
        $sql .= "visitaPromedio = '{$this->visitaPromedio}', ";
        $sql .= "visitaViaAcceso = '{$this->visitaViaAcceso}', ";
        $sql .= "viaId = '{$this->viaId}', ";
        $sql .= "estadoViaId = '{$this->estadoViaId}', ";
        $sql .= "visitaServicioOtro2 = '{$this->visitaServicioOtro2}', ";
        $sql .= "visitaUsoOtro2 = '{$this->visitaUsoOtro2}', ";
        $sql .= "visitaCaracCanios = '{$this->visitaCaracCanios}', ";
        $sql .= "visitaCaracVallados = '{$this->visitaCaracVallados}', ";
        $sql .= "visitaCaracServi = '{$this->visitaCaracServi}', ";
        $sql .= "visitaCaracPuentes = '{$this->visitaCaracPuentes}', ";
        $sql .= "visitaCaracOtros = '{$this->visitaCaracOtros}', ";
        $sql .= "visitaTerrenoObservaciones = '{$this->visitaTerrenoObservaciones}', ";
        $sql .= "visitaMetodologiaAvaluo = '{$this->visitaMetodologiaAvaluo}', ";
        $sql .= "visitaInvesEconomica = '{$this->visitaInvesEconomica}', ";
        $sql .= "visitaConsideraciones = '{$this->visitaConsideraciones}', ";
        $sql .= "visitaSolicitante = '{$this->visitaSolicitante}', ";
        $sql .= "visitaNotaInvestiga = '{$this->visitaNotaInvestiga}', ";
        $sql .= "visitaFormaGeo = '{$this->visitaFormaGeo}', ";
        $sql .= "firmaId = '{$this->firmaId}' ";
        $sql .= "where visitaId = '{$this->visitaId}' ";
        $this->db->query($sql);
        $sql = "update avaluos set avaluoProposito = '{$this->avaluoProposito}' where avaluoId = '{$this->avaluoId}'";
        $this->db->query($sql);
        $visitaId = $this->visitaId;
        $this->limpiaTablasAuxParaEditar($visitaId);
        //insertar en usoInmueblesActual
        $this->insertaTablasPuente("usosInmueblesVisitas", $this->usoActualPredio, $visitaId, "Actual");
        //insertar en serviciosPublicosVisitas -> visita
        $this->insertaTablasPuente("serviciosPublicosVisitas", $this->servPubli1, $visitaId, "Caracteristica");
        //insertar en usoInmueblesActual --> uso predominante
        $this->insertaTablasPuente("usosInmueblesVisitas", $this->usoPredomina1, $visitaId, "Predominante");
        //insertar en topograficasVisitas
        $this->insertaDeTemporal("topografias", $this->hdtransaccion, $visitaId);
        //insertar en serviciosPublicosVisitas -> predio
        $this->insertaTablasPuente("serviciosPublicosVisitas", $this->servPubli2, $visitaId, "Predio");
        //insertar en usoInmueblesActual --> uso predio
        $this->insertaTablasPuente("usosInmueblesVisitas", $this->usoPredomina2, $visitaId, "Predio");
        //insertar en construccionesVisitas -->Construcciones
        $this->insertaDeTemporal("construcciones", $this->hdtransaccion1, $visitaId, "C");
        //insertar en construccionesVisitas -->Anexos
        $this->insertaDeTemporal("construcciones", $this->hdtransaccion2, $visitaId, "A");
        //insertar en elementosVisitas
        $this->insertaDeTemporal("elementos", $this->hdtransaccion3, $visitaId);
        //insertar en investigaciones
        $this->insertaDeTemporal("investigaciones", $this->hdtransaccion4, $visitaId);
        //insertar en depreciaciones
        $this->insertaDeTemporal("depreciaciones", $this->hdtransaccion5, $visitaId);
        $this->db->trans_complete(); //Fin transacción
        return $this->visitaId;
        ;
    } //fin public function edita() {

    public function elimina($opc, $visitaId) {
        $return = $this->db->query("delete from visitas where visitaId = '$visitaId'");
        $return = "1";
        return $return;
    } //fin public function elimina($opc,$visitaId){
    private function limpiaTablasAuxParaEditar($visitaId){
        $this->db->query("delete from usosInmueblesVisitas where visitaId = '$visitaId'");
        $this->db->query("delete from serviciosPublicosVisitas where visitaId = '$visitaId'");
        $this->db->query("delete from topografias where visitaId = '$visitaId'");
        $this->db->query("delete from construccionesVisitas where visitaId = '$visitaId'");
        $this->db->query("delete from elementosVisitas where visitaId = '$visitaId'");
        $this->db->query("delete from investigacionesVisitas where visitaId = '$visitaId'");
    } //fin private function limpiaTablasAuxParaEditar($visitaId){
    private function arregloJsTabla($visitaId, $tipo, $opc) {
        $arreglo = "";
        switch ($opc) {
            case 'usos':
                $sql = "select usoInmuActualId from usosInmueblesVisitas where visitaId = '$visitaId' and usoInmuVisitaTipo = '$tipo'";
                $return = $this->db->query($sql);
                if ($return->num_rows() > 0) {
                    $arreglo = "[";
                    foreach ($return->result() as $row) {
                        $arreglo .= $row->usoInmuActualId . ",";
                    }
                    $arreglo = trim($arreglo, ",");
                    $arreglo .= "]";
                }
                break;
            case 'servicios':
                $sql = "select servPubliId from serviciosPublicosVisitas where visitaId = '$visitaId' and servPubliVisitaTipo = '$tipo'";
                $return = $this->db->query($sql);
                if ($return->num_rows() > 0) {
                    $arreglo = "[";
                    foreach ($return->result() as $row) {
                        $arreglo .= $row->servPubliId . ",";
                    }
                    $arreglo = trim($arreglo, ",");
                    $arreglo .= "]";
                }
                break;
        }
        return $arreglo;
    } //fin private function arregloJsTabla($visitaId,$tipo){
    public function consTodasVisitas(){
        $sql = "select visi.visitaId,visi.visitaPropietario,ava.avaluoNumero,visi.visitaFechaVisita from visitas visi
                inner join avaluos ava on ava.avaluoId = visi.avaluoId
                order by ava.avaluoNumero,visi.visitaFechaVisita";
        return $this->db->query($sql);
    } //fin public function consTodasVisitas(){

    public function consulta($visitaId, $transaccion, $transaccion1, $transaccion2, $transaccion3, $transaccion4,$transaccion5) {
        $retorno = array();
        $this->db->trans_start(); //inicia la transaccion
        $retorno["usoActualArray"] = $this->arregloJsTabla($visitaId, "Actual", "usos");
        $retorno["servPubliVisitaArray"] = $this->arregloJsTabla($visitaId, "Caracteristica", "servicios");
        $retorno["usoPredominanteArray"] = $this->arregloJsTabla($visitaId, "Predominante", "usos");
        $retorno["servPubliPredioArray"] = $this->arregloJsTabla($visitaId, "Predio", "servicios");
        $retorno["usoPredioArray"] = $this->arregloJsTabla($visitaId, "Predominante", "usos");        
        //inserta las topografias
        $this->arregloTopografias = array();
        $sql = "select topografiasId,topografiaNombre,topografiaMedida,unidadId,topografiaPendiente from topografias where visitaId = '$visitaId'";
        $result = $this->db->query($sql);
        foreach($result->result() as $topo){
            $sql = "insert into temporal(temporalVar1,temporalVar2,temporalDecimal1,temporalInt1,transaccion) ";
            $sql .= " values('{$topo->topografiaNombre}','{$topo->topografiaPendiente}','{$topo->topografiaMedida}','{$topo->unidadId}',$transaccion)";
            $this->db->query($sql);
            $this->arregloTopografias[$topo->topografiasId] = $this->db->insert_id();
        }
        unset($topo);
        //inserta las investigaciones
        $sql = "select topografiasId,investigaVisitaEncuesta1,investigaVisitaEncuesta2,investigaVisitaEncuesta3,investigaVisitaEncuesta4,investigaVisitaEncuesta5,investigaVisitaSumatoria,investigaVisitaPromedio,investigaVisitaDesvEstandar,investigaVisitaCoeficiente,investigaVisitaLimiteSup,investigaVisitaLimiteInf,investigaVisitaValorAdoptado from investigacionesVisitas where visitaId = '$visitaId'";
        $result = $this->db->query($sql);
        foreach($result->result() as $inve){
            $inveId = $this->arregloTopografias[$inve->topografiasId];
            $sql = "insert into temporal(transaccion,temporalInt1,temporalDecimal1,temporalDecimal2,temporalDecimal3,temporalDecimal4,temporalDecimal5,temporalDecimal6,temporalDecimal7,temporalDecimal8,temporalDecimal9,temporalDecimal10,temporalDecimal11,temporalDecimal12) ";
            $sql .= " values($transaccion4,$inveId,'{$inve->investigaVisitaEncuesta1}','{$inve->investigaVisitaEncuesta2}','{$inve->investigaVisitaEncuesta3}','{$inve->investigaVisitaEncuesta4}','{$inve->investigaVisitaEncuesta5}','{$inve->investigaVisitaSumatoria}','{$inve->investigaVisitaPromedio}','{$inve->investigaVisitaDesvEstandar}','{$inve->investigaVisitaCoeficiente}','{$inve->investigaVisitaLimiteSup}','{$inve->investigaVisitaLimiteInf}','{$inve->investigaVisitaValorAdoptado}')";
            $this->db->query($sql);
            
        }
        $sql = "insert into temporal(temporalVar1,temporalDecimal1,temporalInt1,temporalInt2,temporalInt3,temporalText1,transaccion,temporalInt4) select construVisitaUso,construVisitaArea,unidadId,estadoPredId,construVisitaVetustez,construVisitaDescripcion,$transaccion1,construVisitaId from construccionesVisitas where visitaId = '$visitaId' and construVisitaTipo = 'C' ";
        $this->db->query($sql);
        $sql = "insert into temporal(temporalVar1,temporalDecimal1,temporalInt1,temporalInt2,temporalInt3,temporalText1,transaccion,temporalInt4) select construVisitaUso,construVisitaArea,unidadId,estadoPredId,construVisitaVetustez,construVisitaDescripcion,$transaccion2,construVisitaId from construccionesVisitas where visitaId = '$visitaId' and construVisitaTipo = 'A' ";
        $this->db->query($sql);
        $sql = "insert into temporal(temporalVar1,temporalDecimal1,temporalInt1,temporalDecimal2,transaccion,temporalInt2) select elementoVisitaNombre,elementoVisitaValUnidad,elementoVisitaCantidad,elementoVisitaTotal,$transaccion3,unidadId from elementosVisitas where visitaId = '$visitaId'";
        $this->db->query($sql);
        //depreciasion
        $sql = "insert into temporal(transaccion,`temporalInt1`,`temporalDecimal1`,`temporalDecimal2`,`temporalDecimal3`,`temporalDecimal4`,`temporalDecimal5`,temporalDecimal7,`temporalDecimal6`,`temporalInt2`) ";
        $sql .= "select $transaccion5, d.devaluaVisitaVidaUtil,d.devaluaVisitaEdadPor,d.devaluaVisitaEstConserva,d.devaluaVisitaValRepo,d.devaluaVisitaPorDepreciacion,d.devaluaVisitaValDepreciacion,d.devaluaVisitaValDepreciado,d.devaluaVisitaValAdoptado,t.temporalId from devaluacionVisita d
                inner join temporal t on t.temporalInt4 = d.construVisitaId
                inner join construccionesVisitas c on c.construVisitaId = t.temporalInt4
                where c.visitaId = '$visitaId' and t.transaccion in ($transaccion1,$transaccion2)";
        $this->db->query($sql);
        $sql = "SELECT visi.visitaId,ava.avaluoId,visi.visitaFechaAvaluo,dep.dptoId as selDepartamento,ciu.ciudadId,visi.visitaVereda,visi.visitaVeredaNombre,
                tipIn.tipInmuebleId,visi.visitaPropietario,visi.visitaFechaVisita,fir.firmaId,visi.visitaLocalizacion,visi.visitaCaracteristicas,visi.visitaNotaInvestiga,visi.visitaFormaGeo,
                via.viaId as viaIdAcceso,est1.estadoPredId as estadoPredIdViaAcceso,visi.visitaServicioOtro1,visi.visitaUsoOtro1,visi.visitaAltura,visi.visitaOtroPiso,
                visi.visitaEstratificacion,visi.visitaNumCatastral,visi.visitaFolioMatricula,visi.visitaEscrituraPublica,visi.visitaNormaUsoSuelo,
                visi.visitaTerreno,uni1.unidadId,visi.visitaLinderoNorte,visi.visitaLinderoSur,visi.visitaLinderoOriente,visi.visitaLinderoOccidente,
                visi.visitaFrente,uni2.unidadId as unidadIdFrente,visi.visitaFondo,uni3.unidadId as unidadIdFondo,visi.visitaPromedio,visi.visitaViaAcceso,
                via1.viaId,est2.estadoPredId as estadoViaId,visi.visitaServicioOtro2,visi.visitaUsoOtro2,visi.visitaCaracCanios,visi.visitaCaracVallados,visi.visitaCaracServi,
                visi.visitaCaracPuentes,visi.visitaCaracOtros,visi.visitaTerrenoObservaciones,visi.visitaMetodologiaAvaluo,visi.visitaInvesEconomica,visi.visitaConsideraciones,ava.avaluoAprobado,ava.avaluoProposito,visi.visitaSolicitante,visi.visitaCaracZanjones
                FROM visitas visi
                inner join avaluos ava on visi.avaluoId = ava.avaluoId 
                inner join ciudades ciu on ciu.ciudadId = visi.ciudadId and ciu.ciudadEstado = 'A'
                inner join firmantes fir on fir.firmaId = visi.firmaId
                inner join departamentos dep on dep.dptoId = ciu.dptoId and dep.dptoEstado = 'A'
                inner join tiposInmuebles tipIn on tipIn.tipInmuebleId = visi.tipInmuebleId and tipIn.tipInmuebleEstado = 'A'
                inner join vias via on via.viaId = visi.viaIdAcceso and via.viaEstado = 'A'
                inner join estadosPredios est1 on est1.estadoPredId = visi.estadoPredIdViaAcceso and est1.estadoPredEstado = 'A'
                inner join unidades uni1 on uni1.unidadId = visi.unidadId and uni1.unidadEstado = 'A'
                inner join unidades uni2 on uni2.unidadId = visi.unidadIdFrente and uni2.unidadEstado = 'A'
                inner join unidades uni3 on uni3.unidadId = visi.unidadIdFondo and uni3.unidadEstado = 'A'
                inner join vias via1 on via1.viaId = visi.viaId and via1.viaEstado = 'A'
                inner join estadosPredios est2 on est2.estadoPredId = visi.estadoViaId and est2.estadoPredEstado = 'A'
                where visi.visitaId = '$visitaId'";
        $retorno["campos"] = $this->db->query($sql);
        $this->db->trans_complete(); //Fin transacción
        return $retorno;
    } //fin public function consulta($visitaId){
    
    public function ultimaVisita($avaluoId){
        $sql = "select * from visitas vi
                where vi.avaluoId = $avaluoId order by vi.visitaFechaVisita desc limit 1 ";
        $result = $this->db->query($sql);
        if($result->num_rows() > 0){
            $result = $result->result();
            return $result[0]->visitaId;
        }else return '';
    }

    private function insertaTablasPuente($tabla, $array, $visitaId, $tipo) {
        if (count($array) > 0) {
            switch ($tabla) {
                case "usosInmueblesVisitas":
                    foreach ($array as $row) {
                        $sql = "insert into usosInmueblesVisitas(usoInmuVisitaTipo,usoInmuActualId,visitaId) values('$tipo',$row,$visitaId)";
                        $this->db->query($sql);
                    }
                    break;
                case "serviciosPublicosVisitas":
                    foreach ($array as $row) {
                        $sql = "insert into serviciosPublicosVisitas(servPubliVisitaTipo,servPubliId,visitaId) values('$tipo',$row,$visitaId)";
                        $this->db->query($sql);
                    }
                    break;
                default:
                    break;
            }
        }
        return;
    }

//fin public function insertaTablasPuente($tabla, $array,$visitaId, $tipo) {

    private function insertaDeTemporal($tabla, $transaccion, $visitaId, $opc = null) {
        $sql = "select * from temporal where transaccion = $transaccion";
        $result = $this->db->query($sql);
        if ($result->num_rows() > 0) {
            switch ($tabla) {
                case "topografias":
                    foreach ($result->result() as $row) {
                        $sql = "insert into topografias(topografiaNombre,topografiaMedida,unidadId,visitaId,topografiaPendiente) values";
                        $sql .= "('{$row->temporalVar1}',{$row->temporalDecimal1},{$row->temporalInt1},$visitaId,'{$row->temporalVar2}')";
                        $this->db->query($sql);
                        $this->arregloTopografias[$row->temporalId] = $this->db->insert_id();
                    }
                    break;
                case "investigaciones":
                    foreach ($result->result() as $row) {
                        $topoId = $this->arregloTopografias[$row->temporalInt1];
                        $sql = "insert into investigacionesVisitas(investigaVisitaEncuesta1,investigaVisitaEncuesta2,investigaVisitaEncuesta3,investigaVisitaEncuesta4,investigaVisitaEncuesta5,investigaVisitaSumatoria,investigaVisitaPromedio,investigaVisitaDesvEstandar,investigaVisitaCoeficiente,investigaVisitaLimiteSup,investigaVisitaLimiteInf,investigaVisitaValorAdoptado,visitaId,topografiasId) values";
                        $sql .= "('{$row->temporalDecimal1}',{$row->temporalDecimal2},{$row->temporalDecimal3},{$row->temporalDecimal4},{$row->temporalDecimal5},{$row->temporalDecimal6},{$row->temporalDecimal7},{$row->temporalDecimal8},{$row->temporalDecimal9},{$row->temporalDecimal10},{$row->temporalDecimal11},{$row->temporalDecimal12},$visitaId,$topoId)";
                        $this->db->query($sql);
                    }
                    break;
                case "construcciones":
                    foreach ($result->result() as $row) {
                        $sql = "insert into construccionesVisitas(construVisitaTipo,construVisitaArea,construVisitaUso,construVisitaVetustez,construVisitaDescripcion,unidadId,estadoPredId,visitaId) values";
                        $sql .= "('$opc','{$row->temporalDecimal1}','{$row->temporalVar1}','{$row->temporalInt3}','{$row->temporalText1}','{$row->temporalInt1}','{$row->temporalInt2}',$visitaId)";
                        $this->db->query($sql);
                        $this->arregloConstrucciones[$row->temporalId] = $this->db->insert_id();;
                    }
                    break;
                case "elementos":
                    foreach ($result->result() as $row) {
                        $sql = "insert into elementosVisitas(elementoVisitaNombre,elementoVisitaCantidad,elementoVisitaValUnidad,elementoVisitaTotal,visitaId,unidadId) values";
                        $sql .= "('{$row->temporalVar1}','{$row->temporalInt1}','{$row->temporalDecimal1}','{$row->temporalDecimal2}',$visitaId,'{$row->temporalInt2}')";
                        $this->db->query($sql);
                    }
                    break;
                case "depreciaciones":
                    echo "antes $sql <br/>";
                    foreach ($result->result() as $row) {
                        $sql = "insert into devaluacionVisita(devaluaVisitaVidaUtil,devaluaVisitaEdadPor,devaluaVisitaEstConserva,devaluaVisitaValRepo,devaluaVisitaPorDepreciacion,devaluaVisitaValDepreciacion,devaluaVisitaValDepreciado,devaluaVisitaValAdoptado,construVisitaId) values";
                        $sql .= "('{$row->temporalInt1}','{$row->temporalDecimal1}','{$row->temporalDecimal2}','{$row->temporalDecimal3}','{$row->temporalDecimal4}','{$row->temporalDecimal5}','{$row->temporalDecimal7}','{$row->temporalDecimal6}','{$this->arregloConstrucciones[$row->temporalInt2]}')";
                        echo $sql."<br/>";
                        $this->db->query($sql);
                    }
                    break;
                default :
                    exit("Error en insertaDeTemporal " . $tabla);
                    break;
            }
        }
    }

// fin private function insertaDeTemporal($tabla, $transaccion, $visitaId,$opc = null) {

    private function validaCampos() {
        /* Valida los campos obligatorios */
        $this->evaluaParametro("visitaId",true);
        $this->evaluaParametro("avaluoId");
        $this->evaluaParametro("selDepartamento");
        $this->evaluaParametro("ciudadId");
        $this->evaluaParametro("visitaVereda");
        $this->evaluaParametro("visitaVeredaNombre");
        $this->evaluaParametro("tipInmuebleId");
        $this->usoActualPredio = $_POST["usoActualPredio"];
        $this->evaluaParametro("visitaPropietario");
        $this->evaluaParametro("visitaFechaVisita");
        $this->evaluaParametro("visitaFechaAvaluo");
        $this->evaluaParametro("firmaId");
        $this->evaluaParametro("visitaLocalizacion");
        $this->evaluaParametro("visitaCaracteristicas");
        $this->evaluaParametro("viaIdAcceso");
        $this->evaluaParametro("estadoPredIdViaAcceso");
        $this->servPubli1 = $_POST["servPubli1"];
        $this->evaluaParametro("visitaServicioOtro1",true);
        $this->usoPredomina1 = $_POST["usoPredomina1"];
        $this->evaluaParametro("visitaUsoOtro1",true);
        $this->evaluaParametro("visitaAltura");
        $this->evaluaParametro("visitaOtroPiso",true);
        $this->evaluaParametro("visitaEstratificacion");
        $this->evaluaParametro("visitaNumCatastral", true);
        $this->evaluaParametro("visitaFolioMatricula", true);
        $this->evaluaParametro("visitaEscrituraPublica", true);
        $this->evaluaParametro("visitaNormaUsoSuelo");
        $this->evaluaParametro("visitaTerreno");
        $this->evaluaParametro("unidadId");
        $this->evaluaParametro("visitaLinderoNorte");
        $this->evaluaParametro("visitaLinderoSur");
        $this->evaluaParametro("visitaLinderoOriente");
        $this->evaluaParametro("visitaLinderoOccidente");
        $this->evaluaParametro("hdtransaccion");
        $this->evaluaParametro("visitaNotaInvestiga");
        $this->evaluaParametro("visitaFrente");
        $this->evaluaParametro("unidadIdFrente");
        $this->evaluaParametro("visitaFondo");
        $this->evaluaParametro("unidadIdFondo");
        $this->evaluaParametro("visitaPromedio");
        $this->evaluaParametro("visitaViaAcceso");
        $this->evaluaParametro("viaId");
        $this->evaluaParametro("estadoViaId");
        $this->servPubli2 = $_POST["servPubli2"];
        $this->evaluaParametro("visitaServicioOtro2",true);
        $this->usoPredomina2 = $_POST["usoPredomina2"];
        $this->evaluaParametro("visitaUsoOtro2",true);
        $this->evaluaParametro("visitaCaracCanios");
        $this->evaluaParametro("visitaCaracVallados");
        $this->evaluaParametro("visitaCaracServi");
        $this->evaluaParametro("visitaCaracPuentes");
        $this->evaluaParametro("visitaCaracOtros",true);
        $this->evaluaParametro("visitaTerrenoObservaciones");
        $this->evaluaParametro("hdtransaccion1");
        $this->evaluaParametro("hdtransaccion2");
        $this->evaluaParametro("hdtransaccion3");
        $this->evaluaParametro("hdtransaccion4");
        $this->evaluaParametro("hdtransaccion5");
        $this->evaluaParametro("visitaMetodologiaAvaluo");
        $this->evaluaParametro("visitaInvesEconomica");
        $this->evaluaParametro("visitaConsideraciones");
        $this->evaluaParametro("visitaSolicitante");
        $this->evaluaParametro("avaluoProposito");
        $this->evaluaParametro("visitaCaracZanjones");
        $this->evaluaParametro("visitaFormaGeo");
    }

//fin public function validaCampos() {

    private function evaluaParametro($parametro, $omitir = false) {
        if ((!$this->input->post($parametro) || trim($this->input->post($parametro)) == "") && !$omitir)
            exit("Valores incorrectos ".$parametro);
        $this->$parametro = $this->input->post($parametro);
        return;
    } //fin private function evaluaParametro($parametro, $omitir = false) {
    public function depreciacion($transaccion1,$transaccion2,$transaccion3){
        $sql = "SELECT concat('Unidad ',cast(@rownum:=@rownum+1 as char(6))) AS rownum,temp.`temporalId`,temp.`temporalVar1`,und.unidadNombre,temp.temporalDecimal1,temp.temporalInt3,fito.temporalInt1 as vidaUtil,fito.temporalDecimal1 as edadPor,fito.temporalDecimal2 as estConserva,fito.temporalDecimal3 as valRepo,fito.temporalDecimal4 as porDepre,fito.temporalDecimal5 as valDeprecion,fito.temporalDecimal7 as valDepreciado,fito.temporalDecimal6 as valAdoptado FROM (SELECT @rownum:=0) r, temporal as temp
                inner join unidades und on und.unidadId = temp.temporalInt1
                left join temporal fito on fito.temporalInt2 = temp.temporalId and fito.transaccion = $transaccion3
                where temp.transaccion = $transaccion1
                union 
                SELECT concat('Anexo ',cast(@rownum1:=@rownum1+1 as char(6))) AS rownum,temp.`temporalId`,temp.`temporalVar1`,und.unidadNombre,temp.temporalDecimal1,temp.temporalInt3,fito.temporalInt1 as vidaUtil,fito.temporalDecimal1 as edadPor,fito.temporalDecimal2 as estConserva,fito.temporalDecimal3 as valRepo,fito.temporalDecimal4 as porDepre,fito.temporalDecimal5 as valDeprecion,fito.temporalDecimal7 as valDepreciado,fito.temporalDecimal6 as valAdoptado FROM (SELECT @rownum1:=0) r, temporal as temp
                inner join unidades und on und.unidadId = temp.temporalInt1
                left join temporal fito on fito.temporalInt2 = temp.temporalId and fito.transaccion = $transaccion3
                where temp.transaccion  = $transaccion2";
        return $this->db->query($sql);
    } //fin public function depreciacion($transaccion1,$transaccion2){
} //fin class
?>
